home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / cdplay / src / elevol.c < prev    next >
Text File  |  1991-10-18  |  4KB  |  147 lines

  1. /* << High C V1.4 >> **********************************************************
  2. **
  3. **    電子ボリューム ルーチン
  4. **
  5. **    1991.03.19 : CREATE
  6. **    1991.03.19 : FINISH
  7. **
  8. **    < HISTORY >
  9. **    1991.03.19 : CREATE
  10. **
  11. **    < note > : TABS = 4
  12. **
  13. **    All Rights Reserved, Copyright (C) Y.Hirata 1991.
  14. **
  15. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  16. **
  17. ******************************************************************************/
  18. #include <snd.h>
  19. #include "elevol.h"
  20.  
  21. /**************************** 電子ボリュームのミュート *****************************/
  22. void ELEVOL_mute( void )
  23. /*=============================================================================
  24. **    電子ボリュームのすべてをミュートする.
  25. **
  26. **    < INPUT  > : なし
  27. **    < OUTPUT > : なし
  28. **    < RETURN > : なし
  29. =============================================================================*/
  30. {
  31.     SND_elevol_all_mute( ELEVOL_MUTE_ON ) ;
  32. }
  33.  
  34. /**************************** 電子ボリュームの設定 *****************************/
  35. int ELEVOL_set( int sw,int l_vol,int r_vol )
  36. /*=============================================================================
  37. **    電子ボリュームの設定
  38. **
  39. **    < INPUT  > : sw        電子ボリューム設定スイッチ
  40. **               : l_vol    LEFT  VOLUME
  41. **               : r_vol    RIGHT VOLUME
  42. **    < OUTPUT > : なし
  43. **    < RETURN > : エラー値
  44. **
  45. **    電子ボリューム は 0 ~ 127 だが、0 の時には その音源は ミュート し、
  46. **    1 ~ 128 の時に電子ボリューム設定をするようにする。
  47. **
  48. **    この関数を CALL すると、オールミュートが解除されます.
  49. =============================================================================*/
  50. {
  51.     static int    muteSw = 0xff ;
  52.  
  53.     if ( sw < 0 || sw > 3 ) return( ELEVOL_ERROR ) ;        /*  エラー    */
  54.  
  55.     if ( l_vol == 0 ) {                /*  指定された音源のチャンネルをミュートする    */
  56.         switch ( sw ) {
  57.         case ELEVOL_LINE :
  58.             muteSw &= 0xf7 ;
  59.             break ;
  60.         case ELEVOL_CD :
  61.             muteSw &= 0xdf ;
  62.             break ;
  63.         case ELEVOL_MIC :
  64.             muteSw &= 0xbf ;
  65.             break ;
  66.         case ELEVOL_MODEM :
  67.             muteSw &= 0x7f ;
  68.         }
  69.     } else {                    /*  指定された音源のチャンネルのミュートを解除する    */
  70.         switch ( sw ) {
  71.         case ELEVOL_LINE :
  72.             muteSw |= 0x08 ;
  73.             break ;
  74.         case ELEVOL_CD :
  75.             muteSw |= 0x20 ;
  76.             break ;
  77.         case ELEVOL_MIC :
  78.             muteSw |= 0x40 ;
  79.             break ;
  80.         case ELEVOL_MODEM :
  81.             muteSw |= 0x80 ;
  82.         }
  83.         l_vol -- ;
  84.     }
  85.  
  86.     if ( r_vol == 0 ) {
  87.         switch ( sw ) {
  88.         case ELEVOL_LINE :
  89.             muteSw &= 0xfb ;
  90.             break ;
  91.         case ELEVOL_CD :
  92.             muteSw &= 0xef ;
  93.             break ;
  94.         case ELEVOL_MIC :
  95.             muteSw &= 0xbf ;
  96.             break ;
  97.         case ELEVOL_MODEM :
  98.             muteSw &= 0x7f ;
  99.         }
  100.     } else {
  101.         switch ( sw ) {
  102.         case ELEVOL_LINE :
  103.             muteSw |= 0x04 ;
  104.             break ;
  105.         case ELEVOL_CD :
  106.             muteSw |= 0x10 ;
  107.             break ;
  108.         case ELEVOL_MIC :
  109.             muteSw |= 0x40 ;
  110.             break ;
  111.         case ELEVOL_MODEM :
  112.             muteSw |= 0x80 ;
  113.         }
  114.         r_vol -- ;
  115.     }
  116.  
  117.     if ( l_vol > ELEVOL_MAX ) l_vol = ELEVOL_MAX ;
  118.     if ( l_vol < ELEVOL_MIN ) l_vol = ELEVOL_MIN ;
  119.     if ( r_vol > ELEVOL_MAX ) r_vol = ELEVOL_MAX ;
  120.     if ( r_vol < ELEVOL_MIN ) r_vol = ELEVOL_MIN ;
  121.  
  122.     SND_elevol_all_mute( ELEVOL_MUTE_OFF ) ;
  123.     SND_elevol_set( sw,l_vol,r_vol ) ;
  124.  
  125.     SND_elevol_mute( muteSw ) ;
  126.  
  127.     return ( ELEVOL_NOERROR ) ;
  128. }
  129.  
  130. /**************************** 電子ボリュームの設定 *****************************/
  131. int ELEVOL_get( int sw,int *l_vol,int *r_vol )
  132. /*=============================================================================
  133. **    電子ボリューム値の読み取り
  134. **
  135. **    < INPUT  > : sw        電子ボリューム設定スイッチ
  136. **               : l_vol    LEFT  VOLUME
  137. **               : r_vol    RIGHT VOLUME
  138. **    < OUTPUT > : なし
  139. **    < RETURN > : エラー値
  140. **
  141. **    電子ボリューム は 0 ~ 127 だが、読み取り値は 偶数 となる.
  142. =============================================================================*/
  143. {
  144.     return( SND_elevol_read( sw,l_vol,r_vol ) ) ;
  145. }
  146.  
  147.